// 编程范式: 命令式编程(1.做什么 2.做什么 3....) / 声明式编程(做一个声明数据在哪,自动遍历....)
// 编程范式: 面向对象编程(尽可能把很多东西抽象成一个对象)[第一公民:对象] /  函数式编程(尽可能把很多东西抽象成一个函数)[第一公民:函数]
// 高阶函数:函数的参数还是一个函数
// filter/map/reduce

// filter中的回调函数有一个要求:必须返回一个boolean值
// 当返回true时,函数内部会自动将这次回调的value加入到新的数组中
// 当返回false时,函数内部会过滤掉这次的n
// reduce作用对数组中所有的内容进行汇总(上一次返回的值,当前项的值)

const nums = [10, 20, 111, 222, 444, 40, 50]


console.log(nums.filter(function (value) {
  return value < 100
}).map(function (value) {
  return value * 2
}).reduce(function (preValue, currValue) {
  // 返回值会作为下一次的preValue
  return preValue + currValue
}, 0))

// // 需求 取出小于一百的数字
// const nums = [10, 20, 111, 222, 444, 40, 50]
// let newNums = []
// for (let n of nums) {
//   if (n < 100) {
//     newNums.push(n)
//   }
// }
// // 2.将所有小于100的数字进行转换:全部*2
// let new2Nums = []
// for (let n of newNums) {
//   new2Nums.push(n * 2)
// }

// // 3.将上面得出的数组所有元素相加,得到最终的结果
// let total = 0
// for (let n of new2Nums) {
//   total += n
// }

// console.log(total);